package com.joker.demo.admin.service;

import com.joker.demo.admin.domain.dto.ExecutorRuntimeQueryDTO;
import com.joker.demo.admin.domain.po.ExecutorStatusPO;
import com.joker.demo.admin.domain.vo.ExecutorRuntimeOverviewVO;
import com.joker.demo.admin.domain.vo.ExecutorRuntimeVO;
import com.joker.demo.admin.domain.vo.OnlineExecutorTrendVO;
import com.joker.demo.admin.domain.vo.PageResult;

import java.util.List;

/**
 * 执行器运行情况Service接口
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:00
 */
public interface ExecutorRuntimeService {

    /**
     * 获取执行器运行情况概览
     *
     * @return 概览信息
     */
    ExecutorRuntimeOverviewVO getRuntimeOverview();

    /**
     * 分页查询执行器运行情况
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResult<ExecutorRuntimeVO> queryExecutorRuntime(ExecutorRuntimeQueryDTO queryDTO);

    /**
     * 查询指定执行器的运行情况
     *
     * @param registerKey 执行器标识
     * @return 运行情况
     */
    ExecutorRuntimeVO getExecutorRuntime(String registerKey);

    /**
     * 查询所有执行器的运行情况
     *
     * @return 运行情况列表
     */
    List<ExecutorRuntimeVO> getAllExecutorRuntime();

    /**
     * 查询在线执行器列表
     *
     * @return 在线执行器列表
     */
    List<ExecutorRuntimeVO> getOnlineExecutors();

    /**
     * 查询离线执行器列表
     *
     * @return 离线执行器列表
     */
    List<ExecutorRuntimeVO> getOfflineExecutors();

    /**
     * 更新执行器状态
     *
     * @param executorStatus 执行器状态
     */
    void updateExecutorStatus(ExecutorStatusPO executorStatus);

    /**
     * 清理离线执行器状态
     *
     * @param timeoutMinutes 超时时间(分钟)
     */
    void cleanOfflineExecutors(Integer timeoutMinutes);

    /**
     * 查询在线执行器趋势（24小时内按小时统计）
     *
     * @return 在线执行器趋势数据
     */
    OnlineExecutorTrendVO queryOnlineExecutorTrend();
}
